|
|
| Расположение в меню |
|---|
| Эскиз → Ограничения эскиза → Ограничение преломления (Закон Снеллиуса) |
| Верстаки |
| Скетчер |
| Быстрые клавиши |
| K W |
| Представлено в версии |
| 0.15 |
| См. также |
| Нет |
Инструмент Ограничение преломления (Закон Снеллиуса) ограничивает две линии, чтобы они следовали закону преломления света, когда он проникает через границу раздела двух материалов с разными показателями преломления. Смотри Закон Снеллиуса (англ.), (рус.)
Закон Снеллиуса
Последовательность щелчков обозначена жёлтыми стрелками с цифрами, n1 и n2 показывают, где находятся показатели преломления
Ограничения можно создавать с помощью макросов и в консоли Python, используя следующие команды:
Sketch.addConstraint(Sketcher.Constraint('SnellsLaw',line1,pointpos1,line2,pointpos2,interface,n2byn1))
где:
Sketch - объект эскиза.line1 и pointpos1 - два целых числа, определяющие конечную точку линии в среде с показателем преломления n1. line1 - это индекс линии в эскизе (значение, возвращаемое Sketch.addGeometry), а pointpos1 должен быть равен 1 для начальной точки и 2 для конечной.line2 и pointpos2 - это индексы, определяющие конечную точку второй линии (в среде n2)interface - индекс, указывающий на линию, обозначающую позицию границы между средой n1 и средой n2n2byn1 - число с плавающей точкой, равное отношению показателей преломления n2/n1На странице Написание скриптов в Скетчер объясняются значения, которые можно использовать для line1, pointpos1, line2, pointpos2 и interface, а также приводятся дополнительные примеры создания ограничений из скриптов Python.
Пример:
import Sketcher
import Part
import FreeCAD
StartPoint = 1
EndPoint = 2
f = App.activeDocument().addObject("Sketcher::SketchObject","Sketch")
# add geometry to the sketch
icir = f.addGeometry(Part.Circle(App.Vector(-547.612366,227.479736,0),App.Vector(0,0,1),68.161979))
iline1 = f.addGeometry(Part.LineSegment(App.Vector(-667.331726,244.127090,0),App.Vector(-604.284241,269.275238,0)))
iline2 = f.addGeometry(Part.LineSegment(App.Vector(-604.284241,269.275238,0),App.Vector(-490.940491,256.878265,0)))
# add constraints
# helper constraints:
f.addConstraint(Sketcher.Constraint('Coincident',iline1,EndPoint,iline2,StartPoint))
f.addConstraint(Sketcher.Constraint('PointOnObject',iline1,EndPoint,icir))
# the Snell's law:
f.addConstraint(Sketcher.Constraint('SnellsLaw',iline1,EndPoint,iline2,StartPoint,icir,1.47))
App.ActiveDocument.recompute()